(PYTHON) Day - 2

Reference

  • Numpy - Numpy.org
  • 문제 출처 - HackerRank
  • 파이썬 연습 - Practice - Python

개인적인 생각과 상상으로 작성한 내용들이 포함되어 있습니다
문제를 풀고 Discussion Tab을 참고하며 코드 스타일을 개선하려고 노력하고자 합니다


Numpy

개요 - About NumPy

Numpy는 Python에서 scientific computing을 하기 위한 기본 패키지입니다.

Scientific computing이란
과학적 문제를 해결 및 분석하기 위한 시뮬레이션이나 수학적 모델링 및 정량 분석 등을 수행하는 소프트웨어 및 애플리케이션을 개발하는 것을 말합니다

Numpy의 특징들 중에서도 특히:

  • 강력한 N-차원 배열 객체
    [a powerful N-dimensional array object]
  • 세련된 기능들
    [sophisticated (broadcasting) functions]
  • C/C++ 및 Fortran 코드 통합 도구
    [tools for integrating C/C++ and Fortran code]
  • 유용한 선형 대수, 푸리에 변환 및 난수 기능
    [useful linear algebra, Fourier transform, and random number capabilities]

이런 과학적인 용도 이외에도, Numpy는 일반 데이터의 효율적인 다차원 컨테이너로 사용될 수 있으며 임의의 데이터 타입을 선언할 수도 있습니다.
Numpy를 통해 다양한 데이터베이스와 원활하고 신속하게 통합할 수 있습니다.

역사 - Older Array Packages

파이썬에서 최초로 배열 객체와 관련해서 작성된 패키지는 Numeric 이였습니다.
과거에는 다양한 어플리케이션 개발에 유용하게 사용되었는데… 사람의 욕심은 끝이 없고…
더 많은 기능이 포함된 Numarray 패키지를 구현해서 사용하게 됩니다.
굳이 2개로 놔두는 것 보다 통합하는 것이 좋겠다 싶어서 Numeric과 Numarray 패키지의 기능들을 모두 포함시켜 지금의 NumPy 패키지를 탄생시켰습니다.

NumPy가 처음 만들어지고 이제 막 사용되던 2005년 말 약 6개월 동안에는 SciPy Core 라고 불렸습니다.
하지만 좀 더 명확하게 용도와 기능에 맞게 구분하기 위해 현재 SciPy 패키지는 따로 분리되어 존재하게 되었고
2006년 1월에 Numeric + Python 을 합쳐 NumPy 라는 명칭으로 변경되어 현재까지 사용되고 있습니다.


HackerRank

1차원 - vector (row)
2차원 - matrix (row, column)
3차원 - tensor (row, column, depth)

axis에 대해서: 2차원 좌표평면을 생각하면서 x축(row), y축(col)이 각각 0, 1에 해당한다고 생각하면 외우기 쉬움

  • NumPy에서 axis의 이해 TAEWAN.KIM

Min, Max

각 열의 최소값을 먼저 찾고 그 중 최대값을 결과로 출력하는 문제

import numpy

N, M = map(int, input().split())
my_array = numpy.array([input().split() for _ in range(N)], int)

print(numpy.max(numpy.min(my_array, axis=1)))

배열만 사용하기 때문에 array만 호출하고,
‘.’을 사용한 코딩

from numpy import array
n, _m = map(int, input().split())
a = array([input().split() for _ in range(n)], int)
print(a.min(axis=1).max())

__ 극한의 한 줄 코딩

print(np.max(np.min(np.array([input().split() for _ in range(int(input().split()[0]))],int),axis=1))) 

Floor, Ceil, Rint

이 문제에서는 내림, 올림, 반올림(정수로)만 다루지만 추가적으로,

  • around() : 0.5를 기준으로 올림 혹은 내림
  • round_( , N) : N 소수점 자릿수까지 반올림
  • fix() : ‘0’ 방향으로 가장 가까운 정수로 올림 혹은 내림
  • trunc() : 각 원소의 소수점 부분은 잘라버리고 정수값만 남김
    들이 존재한다.

HackeRank의 체점 시스템의 버그로 출력 옵션을 조금 수정해줘야 한다.

import numpy as np

np.set_printoptions(sign=' ')

a = np.array(input().split(), float)
print(np.floor(a))
print(np.ceil(a))
print(np.rint(a))

이런 출력 방식이 있다는 것을 참고!

import numpy as np
a = np.array(input().split(), float)
print(\*(f(a) for f in [np.floor, np.ceil, np.rint]), sep='\n')